package Controllers;

import java.util.ArrayList;

public interface ControllerInterface<T extends DB.RowInterface>
{
	/**
	 * Indsætter et objekt i tabellen
	 * @param data Objektet der skal indsættes
	 * @return Primærnøglen for det indsatte objekt
	 */
	public int insert(T data);

	/**
	 * Indsætter en samling af objekter, som er afhængelig af en andet objekt, i tabellen
	 * @param data En samling af objekter
	 */
	public void insertDependent(ArrayList<? extends DB.RowInterface> data);
	
	/**
	 * Finder en specifik værdi i tabellen
	 * @param id Rækkens primærnøgle
	 * @return Objektet med den givne primærnøglen
	 */
	public T find(int id);

	/**
	 * Opdatere et objekt i tabellen
	 * @param data En samling af objekter
	 * @param where Indikation på hvilken række der skal opdateres
	 * @return Antallet af opdaterede rækker
	 */
	public int update(T data, String where);

	/**
	 * Opdaterer en samling af objekter, som er afhængelig af en andet objekt, i tabellen
	 * @param data En samling af objekter
	 * @param where Indikation på hvilken række der skal opdateres
	 */
	public void updateDependent(ArrayList<? extends DB.RowInterface> data, String where);
	//TODO Kan vi udelade where?

	/**
	 * Sletter en værdi i databasen ud fra værdiens ID
	 * @param id Værdiens identifikations nummer
	 * @return Antallet af slettede rækker
	 */
	public int delete(int id);

	/**
	 * Henter alle værdier i tabellen
	 * @return Samling af de hentede objekter
	 */
	public ArrayList<T> fetchAll();
}
